/******************************************************************************* * Copyright (c) 2005, 2013 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.ant.internal.ui; import java.io.File; import org.eclipse.core.filesystem.EFS; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.console.IHyperlink; import org.eclipse.ui.ide.FileStoreEditorInput; import org.eclipse.ui.texteditor.IDocumentProvider; import org.eclipse.ui.texteditor.ITextEditor; public class ExternalHyperlink implements IHyperlink { private File fFile; private int fLineNumber; public ExternalHyperlink(File file, int lineNumber) { super(); fFile = file; fLineNumber = lineNumber; } @Override public void linkEntered() { // do nothing } @Override public void linkExited() { // do nothing } @Override public void linkActivated() { IEditorInput input; IFileStore fileStore; try { fileStore = EFS.getStore(fFile.toURI()); input = new FileStoreEditorInput(fileStore); } catch (CoreException e) { // unable to link AntUIPlugin.log(e); return; } IWorkbenchPage activePage = AntUIPlugin.getActiveWorkbenchWindow().getActivePage(); try { IEditorPart editorPart = activePage.openEditor(input, "org.eclipse.ant.ui.internal.editor.AntEditor", true); //$NON-NLS-1$ if (fLineNumber > 0 && editorPart instanceof ITextEditor) { ITextEditor textEditor = (ITextEditor) editorPart; IDocumentProvider provider = textEditor.getDocumentProvider(); try { provider.connect(input); } catch (CoreException e) { // unable to link AntUIPlugin.log(e); return; } IDocument document = provider.getDocument(input); try { IRegion lineRegion = document.getLineInformation(fLineNumber); textEditor.selectAndReveal(lineRegion.getOffset(), lineRegion.getLength()); } catch (BadLocationException e) { // unable to link AntUIPlugin.log(e); } provider.disconnect(input); } } catch (PartInitException e) { // do nothing } } }